﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using RC.ControlAcceso.ObjetosNegocio;

public partial class Usuario : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            MenuSuperior1.Encabezado("Usuarios");

            //lo pongo en estado insetar si el ID no es especificado o el numero es menor o igual a 0
            int _IdUsuario;
            if (Request.QueryString["ID"] == null)
                fvUsuario.ChangeMode(FormViewMode.Insert);
            else
            {
                if (int.TryParse(Request.QueryString["ID"], out _IdUsuario) == true)
                    if (_IdUsuario <= 0)
                        fvUsuario.ChangeMode(FormViewMode.Insert);
            }
            VerificarEstadoFormview();
        }
        
        
    }
    protected void btnBuscar_Click1(object sender, ImageClickEventArgs e)
    {
        Buscar();
    }
    private void Buscar()
    {
        popBusqueda.ShowOnPageLoad = true;
        gvPersonalColeccion0.DataBind();
    }
    protected void txtBuscar_TextChanged(object sender, EventArgs e)
    {
        Buscar();
    }
    protected void dsUsuarios_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {
        if (!IsPostBack)
        {
            // si es la primera vez que se carga la pantalla, cancelo la busqueda.
            e.Cancel = true;
        }
    }
    protected void cvInsertarUsuarioExiste_ServerValidate(object source, ServerValidateEventArgs args)
    {
        if (fvUsuario.CurrentMode == FormViewMode.Insert)
        {
            TextBox _textBox = (TextBox)fvUsuario.FindControl("UsuarioIdTextBox");
            if (CA2Usuario.SeguridadUsuarioIdExiste(_textBox.Text) == true)
                args.IsValid = false;
            else
                args.IsValid = true;
        }
    }
    protected void VerificarEstadoFormview()
    {
        if (fvUsuario.CurrentMode == FormViewMode.Insert)
        {//si esta en modo insertar, tengo que cargar los roles existenes

            CheckBoxList _chkRoles = (CheckBoxList)fvUsuario.FindControl("chkListRoles");
            _chkRoles.DataSource = CA2Usuario.SeguridadObtenerTodosLosRoles();
            _chkRoles.DataBind();

        }
    }
    protected void fvUsuario_ItemInserting(object sender, FormViewInsertEventArgs e)
    {
        CheckBoxList _lista = (CheckBoxList)fvUsuario.FindControl("chkListRoles");
        string _valores = "";
        
        foreach(ListItem _item in _lista.Items)
            if (_item.Selected == true)
            {
                if (_valores != "")
                    _valores = _valores + "|";
                _valores = _valores + _item.Text;
            }

        e.Values["RolesAsignados"] = _valores.Split(char.Parse("|"));
    }
    protected void dsUsuario_Inserted(object sender, ObjectDataSourceStatusEventArgs e)
    {
        CA2Usuario _usuario = (CA2Usuario)e.ReturnValue;
        Response.Redirect("Usuario.aspx?ID=" + _usuario.ID);
        
    }
    protected void fvUsuario_ItemUpdating(object sender, FormViewUpdateEventArgs e)
    {
        if (UsuarioCargado == null)
            return;

        CheckBoxList _lista = (CheckBoxList)fvUsuario.FindControl("chkListRoles");
        string _valores = "";

        foreach (ListItem _item in _lista.Items)
            if (_item.Selected == true)
            {
                if (_valores != "")
                    _valores = _valores + "|";
                _valores = _valores + _item.Text;
            }

        e.NewValues["ID"] = UsuarioCargado.ID;
        e.NewValues["UsuarioId"] = UsuarioCargado.UsuarioId;
        e.NewValues["RolesAsignados"] = _valores.Split(char.Parse("|"));
    }
    protected void btnBloquear_Click(object sender, EventArgs e)
    {
        CA2Usuario.SeguridadBloquearUsuario(((Label)fvUsuario.FindControl("UsuarioIdLabel")).Text);
        Response.Redirect("Usuario.aspx?ID=" + Request.QueryString["ID"]);
    }
    protected void btnDesbloquear_Click(object sender, EventArgs e)
    {
        CA2Usuario.SeguridadDesbloquearUsuario(((Label)fvUsuario.FindControl("UsuarioIdLabel")).Text);
        Response.Redirect("Usuario.aspx?ID=" + Request.QueryString["ID"]);
    }
    protected void chkListRoles_Load(object sender, EventArgs e)
    {
        //CheckBoxList _roles = (CheckBoxList)fvUsuario.FindControl("chkListRoles");
        CheckBoxList _roles = (CheckBoxList)sender;
        foreach (string _rol in CA2Usuario.SeguridadObtenerTodosLosRoles())
        {
            _roles.Items.Add(new ListItem(_rol));
        }
    }
    protected void chkListRoles_DataBinding(object sender, EventArgs e)
    {
        if (UsuarioCargado != null)
        {
            CheckBoxList _chkRoles = (CheckBoxList)sender;
            foreach (string _rol in UsuarioCargado.RolesAsignados)
            {
                _chkRoles.Items.FindByValue(_rol).Selected = true;
            }
        }

    }
    /// <summary>
    /// devuelve null si el objeto no existe
    /// </summary>
    private CA2Usuario UsuarioCargado
    {
        get
        {
            if ((Request.QueryString["ID"] == null)
                || (Request.QueryString["ID"] == ""))
                return null;

            int _usuarioId;
            if (int.TryParse(Request.QueryString["ID"], out _usuarioId) == false)
                return null;
            else
                return CA2Usuario.CrearUsuario(_usuarioId);
        }
    }
    protected void btnNuevo_Click(object sender, EventArgs e)
    {
        Response.Redirect("~/Usuario.aspx");
    }
    /// <summary>
    /// Si el texto es "", el control queda con Visible = false
    /// </summary>
    /// <param name="pTexto">"" para hacer desaparecer el control</param>
    /// <param name="pColor"></param>
    private void MostrarMensaje(string pTexto, System.Drawing.Color pColor)
    {   
        lblMensaje.Text = pTexto;
        lblMensaje.ForeColor = pColor;
        lblMensaje.Visible = true;

        if (pTexto == "")
            lblMensaje.Visible = false;
    }

    protected void btnActualizar_Click(object sender, EventArgs e)
    {
        MostrarMensaje("El usuario ha sido modificado", System.Drawing.Color.Green);
    }
    protected void btnEliminar_Click(object sender, EventArgs e)
    {
        MostrarMensaje("El usuario ha sido eliminado", System.Drawing.Color.Green);
    }
}